package main

import (
	"bufio"
	"fmt"
	"io"
	"log"
	"os"
)

func main() {
	/*
		bufio: 高效 io 读写
			buffer 缓存
			io: input/output
		将 io 包下的 Reader，Writer对象进行包装，带缓存的包装，T提高读写效率

			ReadBytes()
			ReadString()
			ReadLine()
	*/
	fileName := "E:/代码文件/灰太狼/狼堡.txt"
	file, err := os.Open(fileName)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	//创建 bufio 下面的 Reader 对象
	b1 := bufio.NewReader(file)
	//1.Read(), 高效读取
	p := make([]byte, 1024)
	n1, err := b1.Read(p)
	fmt.Println(n1)
	fmt.Println(string(p[:n1]))

	//2.ReadLine(), 读取一行
	data, flag, err := b1.ReadLine()
	fmt.Println(flag)
	fmt.Println(err)
	fmt.Println(string(data))

	//3.ReadString()
	s1, err := b1.ReadString('\n')
	fmt.Println(err)
	fmt.Println(s1)

	s1, err = b1.ReadString('\n')
	fmt.Println(err)
	fmt.Println(s1)

	for {
		s1, err = b1.ReadString('\n')
		if err == io.EOF {
			fmt.Println("读取完毕。。")
			break
		}
		fmt.Println(s1)
	}

	//4.ReadBytes()
	data, err = b1.ReadBytes('\n')
	fmt.Println(err)
	fmt.Println(string(data))

	//Scanner
	s2 := ""
	fmt.Scanln(&s2) //中间如果有空格的话，只读取到空格前面的内容
	fmt.Println(s2)

	b2 := bufio.NewReader(os.Stdin)
	s2, _ = b2.ReadString('\n')
	fmt.Println(s2)
}
